home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / Anwendun / Pflaster / STEINMT.LST < prev    next >
Encoding:
File List  |  2000-04-30  |  24.5 KB  |  1,279 lines

  1. REM STEINETTM 2.1.1   GFA 3.6   30.4.0 ogg
  2. ' w0
  3. $m39300
  4. DEFWRD "a-z"
  5. ap_id=APPL_INIT()
  6. pfm$="  PflasterMuster  "
  7. IF @t<>0
  8.   ~MENU_REGISTER(ap_id,pfm$)
  9.   ~SHEL_WRITE(9,1,0,CHR$(0),CHR$(0))
  10. ENDIF
  11. INTIN(0)=1
  12. VDISYS 102,1,0
  13. pu=INTOUT(4)
  14. wb=WORK_OUT(0)
  15. wh=WORK_OUT(1)
  16. IF @c<>0
  17.   pfad$=CHR$(GEMDOS(25)+65)+":"+DIR$(0)+"\"
  18. ELSE
  19.   pfad$="E:\GFA\STEINE\"
  20.   ' pfad$="K:\STEINE\"
  21.   RESERVE (39300)
  22. ENDIF
  23. IF XBIOS(44,-1)=44 OR GEMDOS(68,L:-1,1)<0
  24.   a_st=1
  25. ENDIF
  26. IF RSRC_LOAD(pfad$+"STEIN.RSC")=0
  27.   ~FORM_ALERT(1,"[2][ WO IST MEINE |   RESOURCE?][ GRUMPH ]")
  28.   END
  29. ENDIF
  30. ~RSRC_GADDR(0,0,rsc%)
  31. ~RSRC_GADDR(0,1,vers%)
  32. ~RSRC_GADDR(0,2,ende%)
  33. ~RSRC_GADDR(0,3,wahl%)
  34. ~RSRC_GADDR(0,4,stqm%)
  35. DIM w(1,29),a(7),b(7),s(84,56),e$(11),x(84,56),q#(9),o$(21)
  36. FOR f=0 TO 9
  37.   READ w(0,f)
  38. NEXT f
  39. FOR f=0 TO 3
  40.   READ w(1,f)
  41. NEXT f
  42. FOR f=1 TO 11
  43.   READ e$(f)
  44. NEXT f
  45. FOR f=0 TO 21
  46.   READ o$(f)
  47. NEXT f
  48. jax=1028
  49. jay=726
  50. jbx=1008
  51. jby=688
  52. jty=2100
  53. menh=19
  54. ~VQT_EXTENT(pfm$,fx,fy,fv,fw,bx,by,bv,bw)
  55. IF by-fy<10 AND (pu=4 OR pu=2)
  56.   menh=11
  57. ENDIF
  58. wmx=wb+1
  59. wmy=wh-(menh-1)
  60. w(0,1)=menh
  61. w(0,2)=MIN(w(0,2),wmx)
  62. w(0,3)=MIN(w(0,3),wmy)
  63. w(0,7)=wh-140
  64. w(0,11)=menh
  65. w(0,12)=MIN(wmx,jax)
  66. w(0,13)=MIN(wmy,jay)
  67. w(0,14)=MIN(wmx,jax)
  68. w(0,15)=MIN(wmy,jay)
  69. w(1,11)=menh
  70. w(1,12)=w(0,12)
  71. w(1,13)=w(0,13)
  72. adr_1%=V:a(0)
  73. adr_2%=V:b(0)
  74. ABSOLUTE m1,adr_1%
  75. ABSOLUTE m4,adr_1%+6
  76. ABSOLUTE m5,adr_1%+8
  77. ABSOLUTE m6,adr_1%+10
  78. ABSOLUTE m7,adr_1%+12
  79. ABSOLUTE m8,adr_1%+14
  80. ~GRAF_MOUSE(0,0)
  81. ~MENU_BAR(rsc%,1)
  82. ~MENU_IENABLE(rsc%,40,0)
  83. w1=WIND_CREATE(&X100100100101111,wb,wh,w(0,12),w(0,13))
  84. w2=WIND_CREATE(&X100100111101111,wb,wh,w(1,12),w(1,13))
  85. han=w1
  86. wti
  87. ~WIND_OPEN(han,w(0,0),w(0,1),w(0,2),w(0,3))
  88. ~WIND_GET(han,4,wx,wy,wv,ww)
  89. ~WIND_GET(han,5,wx,by,wv,ww)
  90. witi=wy-by
  91. ab
  92. ws156
  93. z$=pfad$+o$(13)
  94. IF EXIST(z$)<>0
  95.   d$=SPACE$(7007)
  96.   BLOAD z$,V:d$
  97.   fh=INSTR(d$,CHR$(13))
  98.   info$=LEFT$(d$,fh-1)
  99.   istt=fh+4
  100.   hin(9999)
  101.   zmax=f
  102. ELSE
  103.   ~MENU_IENABLE(rsc%,37,0)
  104.   nxhp=1
  105. ENDIF
  106. INTIN(0)=0
  107. INTIN(1)=5
  108. VDISYS 39,2,0
  109. DEFTEXT 1,,,13
  110. DEFFILL ,2,7
  111. stein=1
  112. COLOR 1
  113. ON ERROR GOSUB f
  114. ON BREAK GOSUB ade
  115. f:
  116. REPEAT
  117.   fre%=FRE(0)
  118.   ~EVNT_TIMER(230)
  119.   evt_1=EVNT_MULTI(&X10011,2,1,1,0,0,0,0,0,0,0,0,0,0,adr_1%,0,x,y,k,f,yy,zz)
  120.   IF BTST(evt_1,0)<>0
  121.     ~WIND_GET(han,10,fx,fy,fv,fw)
  122.     han(fx)
  123.     tast
  124.   ENDIF
  125.   IF BTST(evt_1,1)<>0 AND mini=0 AND wan=0
  126.     han(WIND_FIND(x,y))
  127.     sub
  128.     IF icon<>0
  129.       IF x>0 AND x<72 AND y>0 AND y<72 AND zz=2
  130.         icn(1)
  131.       ENDIF
  132.     ELSE
  133.       butt
  134.     ENDIF
  135.   ENDIF
  136.   IF BTST(evt_1,4)<>0
  137.     IF m1=10
  138.       ~WIND_GET(han,10,fx,fy,fv,fw)
  139.       han(fx)
  140.       menu
  141.     ELSE
  142.       han(m4)
  143.       event
  144.     ENDIF
  145.   ENDIF
  146. UNTIL qui<>0
  147. CLEAR
  148. END
  149. DEFFN t=INT{ADD({ADD(GB,4)},2)}<>1
  150. DEFFN c=BYTE{ADD(BASEPAGE,256)}<>96
  151. DEFFN b=wb-@v+1
  152. DEFFN h=wh-@w+1
  153. DEFFN hs=ah DIV 16-1
  154. DEFFN v=w(wan,0)+1
  155. DEFFN w=w(wan,1)+witi
  156. DEFFN vi=(mini=0 AND icon=0)
  157. DEFFN xv=wx-@v
  158. DEFFN xw=wy-@w
  159. DEFFN x=x DIV 12+xmo
  160. DEFFN y=y DIV 12+ymo
  161. DATA 0,19,720,540,300,20,32,0,72,72,10,25,635,400
  162. DATA 1*1 STEIN    ,1.5*1 STEIN  ,0.5*1 STEIN  ,1*0.5 STEIN  ,1*1.5 STEIN  ,0.75*1 STEINL
  163. DATA 0.75*1 STEINR,1*0.75 STEINO,1*0.75 STEINU,1.5*0.5 STEIN,0.5*1.5 STEIN
  164. DATA              ,STEIN LĂ–SCHEN,BLOCK        ,BLOCK ANFANG ,BLOCK ENDE    ,
  165. DATA KREIS ,KREISMITTE   ,,,,RECHNE Y:,KEIN SPEICHER
  166. DATA STEININF.TXT,MUSTER,*.PFM,*.UIX,*.BMP, laden..., speichern...,-  INFO  ,PFLASTER
  167. r:
  168. DATA 19,19,31,19,7,19,19,7,19,31,13,19,19,19,19,13,19,19,31,7,7,31
  169. > PROCEDURE tast
  170.   ascii=BYTE(yy)
  171.   SELECT yy
  172.   CASE &H3002
  173.     mini
  174.   CASE &H1709
  175.     icn(0)
  176.   CASE &H1011
  177.     ade
  178.   DEFAULT
  179.     IF @vi
  180.       SELECT yy
  181.       CASE &H7700
  182.         wof
  183.       CASE &H180F
  184.         @v("",1,o$(15),o$(18))
  185.       CASE &H1F13
  186.         @v(o$(14),2,o$(15),o$(19))
  187.       CASE &H2F76,&H2F56
  188.         form(vers%)
  189.       CASE &H1414
  190.         q_m
  191.       DEFAULT
  192.         SELECT wan
  193.         CASE 1
  194.           SELECT yy
  195.           CASE &H1C0D,&H720D
  196.             wex2
  197.           CASE &H4D00
  198.             wty=MIN(1000,wty+sty)
  199.             ws_9_2
  200.           CASE &H4B00
  201.             wty=MAX(1,wty-sty)
  202.             ws_9_2
  203.           CASE &H4800
  204.             wty=MAX(1,wty-1000/(zmax-@hs))
  205.             ws_9_2
  206.           CASE &H5000
  207.             wty=MIN(1000,wty+1000/(zmax-@hs))
  208.             ws_9_2
  209.           ENDSELECT
  210.         CASE 0
  211.           IF ascii>48 AND ascii<60
  212.             stein=ascii-48
  213.             TEXT 167,0,e$(stein)
  214.             CLR block,losch,kreis
  215.           ELSE
  216.             SELECT yy
  217.             CASE &H4D00
  218.               wsx=MIN(1000,wsx+sbx)
  219.               ws_8_1
  220.             CASE &H4B00
  221.               wsx=MAX(1,wsx-sbx)
  222.               ws_8_1
  223.             CASE &H4800
  224.               wsy=MAX(1,wsy-sby)
  225.               ws_9_1
  226.             CASE &H5000
  227.               wsy=MIN(1000,wsy+sby)
  228.               ws_9_1
  229.             CASE &H3062,&H3042
  230.               b
  231.             CASE &H2E63,&H2E43
  232.               c
  233.             CASE &H1769,&H1749,&H6200
  234.               IF nxhp=0 AND (wop2=0 OR (wop2=1 AND han=w1))
  235.                 info
  236.               ENDIF
  237.             CASE &H256B,&H254B
  238.               k
  239.             CASE &H266C,&H264C,&H7030,&HB30
  240.               @l
  241.             CASE &H310E
  242.               n
  243.             CASE &H1372,&H1352
  244.               g
  245.             CASE &H1F73,&H1F53
  246.               s
  247.             CASE &H1615
  248.               uix
  249.             CASE &H1117
  250.               bmp
  251.               ' CASE &H1910
  252.             CASE &H260C
  253.               lk
  254.             ENDSELECT
  255.           ENDIF
  256.         ENDSELECT
  257.       ENDSELECT
  258.     ENDIF
  259.   ENDSELECT
  260. RETURN
  261. > PROCEDURE butt
  262.   SUB y,16
  263.   IF x>-1 AND x<ab AND y>-1 AND y<ah-16
  264.     ON block+1 GOSUB w1,xx,w1
  265.     IF block=2
  266.       y=@y+1
  267.       x=@x+1
  268.       j=0
  269.       FOR w=y TO MIN(56,y+x(0,1)-1)
  270.         INC j
  271.         i=0
  272.         FOR v=x TO MIN(84,x+x(1,0)-1)
  273.           INC i
  274.           f=x(i,j)
  275.           g=(v-1)*12+2-xmo*12
  276.           h=(w-1)*12+2+16-ymo*12
  277.           IF f>0
  278.             s(v,w)=f
  279.             p(f)
  280.           ENDIF
  281.         NEXT v
  282.       NEXT w
  283.     ELSE IF block=1
  284.       IF x<MIN(ab-23,983) AND y<MIN(ah-23,663)
  285.         v=@x+1
  286.         w=@y+1
  287.         x=(v-xmo-1)*12
  288.         y=(w-ymo-1)*12+16
  289.         sttx(4)
  290.         ~EVNT_TIMER(410)
  291.         ~WIND_GET(w1,4,wx,wy,wv,ww)
  292.         REPEAT
  293.           evt_2=EVNT_MULTI(&X100011,1,1,1,0,0,0,0,0,0,0,0,0,0,adr_2%,0,r,s,k,f,yy,zz)
  294.           ~GRAF_RUBBERBOX(@v+x,@w+y,12,12,i,j)
  295.         UNTIL (r>x+12 AND r<MIN(@v+1007,MIN(wb,wx+wv)) AND s>y+12 AND s<MIN(@w+671,MIN(wh,wy+ww)) AND BTST(evt_2,1)<>0) OR BTST(evt_2,0)<>0
  296.         r=(r-@v) DIV 12+1+xmo
  297.         s=(s-@w-16) DIV 12+1+ymo
  298.         ARRAYFILL x(),0
  299.         x(1,0)=r-v
  300.         x(0,1)=s-w
  301.         j=0
  302.         FOR y=w TO MIN(56,s-1)
  303.           INC j
  304.           i=0
  305.           FOR x=v TO MIN(84,r-1)
  306.             INC i
  307.             x(i,j)=s(x,y)
  308.           NEXT x
  309.         NEXT y
  310.         block=2
  311.         sttx(2)
  312.         ~EVNT_TIMER(230)
  313.       ENDIF
  314.     ELSE
  315.       IF kreis=1
  316.         k_anz=MIN(17,k_anz+1)
  317.         IF k_anz=0
  318.           kr_x=x+xmo*12
  319.           kr_y=y+ymo*12
  320.         ENDIF
  321.         CLIP MAX(0,@v),MAX(0,@w+16),MIN(ab,@b),MIN(ah,@h)-16 OFFSET @v,@w+16
  322.         kr_mal
  323.         clp
  324.         TEXT 167,0,o$(6)+STR$(k_anz)+"       "
  325.         IF k_anz=17
  326.           kreis=0
  327.         ENDIF
  328.         ~EVNT_TIMER(230)
  329.       ELSE
  330.         g=@x*12+2-xmo*12
  331.         h=@y*12+2+16-ymo*12
  332.         IF losch=1 AND @x<84 AND @y<56
  333.           fy=s(@x+1,@y+1)
  334.           IF fy>0
  335.             q(fy)
  336.             h(fy)
  337.             fb=9
  338.             IF fy=6 OR fy=8
  339.               fb=3
  340.             ENDIF
  341.             DEFLINE -10922
  342.             FOR r=h-2 TO h+r2-fb STEP 12
  343.               LINE g-2,r,g+r1+2,r
  344.             NEXT r
  345.             FOR s=g-2 TO g+r1-fb STEP 12
  346.               LINE s,h-2,s,h+r2+2
  347.             NEXT s
  348.             s(@x+1,@y+1)=0
  349.           ENDIF
  350.         ELSE
  351.           s(MIN(84,@x+1),MIN(56,@y+1))=stein
  352.           p(stein)
  353.           TEXT 1,17,@x+1
  354.           TEXT 1,33,@y+1
  355.         ENDIF
  356.       ENDIF
  357.     ENDIF
  358.     ON block+1 GOSUB w0,xx,w0
  359.   ENDIF
  360. RETURN
  361. > PROCEDURE menu
  362.   ~MENU_TNORMAL(rsc%,m4,1)
  363.   SELECT m5
  364.   CASE 25
  365.     ade
  366.   CASE 41
  367.     mini
  368.   CASE 42
  369.     icn(0)
  370.   DEFAULT
  371.     IF @vi
  372.       SELECT m5
  373.       CASE 9
  374.         form(vers%)
  375.       CASE 18
  376.         @v("",1,o$(15),o$(18))
  377.       CASE 20
  378.         @v(o$(14),2,o$(15),o$(19))
  379.       CASE 38
  380.         q_m
  381.       CASE 43
  382.         full
  383.       DEFAULT
  384.         IF wan=0
  385.           SELECT m5
  386.           CASE 22
  387.             uix
  388.           CASE 23
  389.             bmp
  390.           CASE 27 TO 35
  391.             ON m5-26 GOSUB s,l,b,c,k,lk,xx,g,n
  392.           CASE 37
  393.             info
  394.             ' CASE 40
  395.           ENDSELECT
  396.         ENDIF
  397.       ENDSELECT
  398.     ENDIF
  399.   ENDSELECT
  400. RETURN
  401. > PROCEDURE event
  402.   SELECT m1
  403.   CASE 20
  404.     ab
  405.     r(m5,m6,m7,m8,1)
  406.   CASE 21
  407.     wtop
  408.   CASE 22
  409.     IF han=w1
  410.       ade
  411.     ELSE
  412.       wex2
  413.     ENDIF
  414.   CASE 23
  415.     IF mini=0
  416.       full
  417.     ELSE
  418.       mini
  419.     ENDIF
  420.   CASE 24
  421.     ~WIND_GET(han,8,sx,sv,sv,sw)
  422.     ~WIND_GET(han,9,sy,sv,sv,sw)
  423.     SELECT m5
  424.     CASE 0
  425.       IF han=w1
  426.         wsy=MAX(1,sy-sby)
  427.         ws_9_1
  428.       ELSE
  429.         wty=MAX(1,sy-sty)
  430.         ws_9_2
  431.       ENDIF
  432.     CASE 1
  433.       IF han=w1
  434.         wsy=MIN(1000,sy+sby)
  435.         ws_9_1
  436.       ELSE
  437.         wty=MIN(1000,sy+sty)
  438.         ws_9_2
  439.       ENDIF
  440.     CASE 2
  441.       wty=MAX(1,sy-1000/(zmax-@hs))
  442.       ws_9_2
  443.     CASE 3
  444.       wty=MIN(1000,sy+1000/(zmax-@hs))
  445.       ws_9_2
  446.     CASE 4
  447.       wsx=MAX(1,sx-sbx)
  448.       ws_8_1
  449.     CASE 5
  450.       wsx=MIN(1000,sx+sbx)
  451.       ws_8_1
  452.     ENDSELECT
  453.   CASE 25
  454.     IF han=w1
  455.       wsx=m5
  456.       ws_8_1
  457.     ENDIF
  458.   CASE 26
  459.     IF han=w1
  460.       wsy=m5
  461.       ws_9_1
  462.     ELSE
  463.       wty=m5
  464.       ws_9_2
  465.     ENDIF
  466.   CASE 27
  467.     IF @vi
  468.       ful
  469.       w(wan,2)=MAX(320,MIN(jax,m7))
  470.       w(wan,3)=MAX(100,MIN(jay,m8))
  471.       ab
  472.       ws
  473.     ENDIF
  474.   CASE 28
  475.     w(wan,0)=m5
  476.     w(wan,1)=m6
  477.     ws
  478.   CASE 34
  479.     icn(34)
  480.   CASE 36
  481.     mini
  482.   CASE 50
  483.     exi=1
  484.     ade
  485.   ENDSELECT
  486. RETURN
  487. '
  488. > PROCEDURE s
  489.   CLR block,losch,kreis
  490.   form(wahl%)
  491.   IF ro<12
  492.     stein=ro
  493.   ENDIF
  494.   r(@v,@w,ab-1,15,0)
  495. RETURN
  496. > PROCEDURE l
  497.   CLR block,kreis
  498.   losch=1
  499.   sttx(1)
  500. RETURN
  501. > PROCEDURE b
  502.   CLR losch,kreis
  503.   block=1
  504.   sttx(3)
  505. RETURN
  506. > PROCEDURE c
  507.   IF x(1,0)<>0
  508.     block=2
  509.     sttx(2)
  510.   ENDIF
  511. RETURN
  512. > PROCEDURE k
  513.   CLR block,losch
  514.   kreis=1
  515.   k_anz=-1
  516.   sttx(7)
  517. RETURN
  518. > PROCEDURE sttx(f)
  519.   TEXT 167,0,o$(f)
  520. RETURN
  521. > PROCEDURE lk
  522.   CLR kreis,k_anz
  523.   red
  524. RETURN
  525. > PROCEDURE g
  526.   FOR s=1 TO 56
  527.     g=82*12+2
  528.     h=(s-1)*12+2+16
  529.     IF s(83,s)=2
  530.       p(1)
  531.       s(83,s)=1
  532.     ENDIF
  533.   NEXT s
  534.   FOR s=1 TO 56
  535.     fx=s(84,s)
  536.     g=83*12+2
  537.     h=(s-1)*12+2+16
  538.     IF fx=5
  539.       p(11)
  540.       s(84,s)=11
  541.     ELSE IF fx=1 OR fx=2 OR (fx>5 AND fx<10)
  542.       p(3)
  543.       s(84,s)=3
  544.     ENDIF
  545.   NEXT s
  546.   FOR r=1 TO 84
  547.     g=(r-1)*12+2
  548.     h=54*12+2+16
  549.     IF s(r,55)=5
  550.       p(1)
  551.       s(r,55)=1
  552.     ENDIF
  553.   NEXT r
  554.   FOR r=1 TO 84
  555.     fx=s(r,56)
  556.     g=(r-1)*12+2
  557.     h=55*12+2+16
  558.     IF fx=2
  559.       p(10)
  560.       s(r,56)=10
  561.     ELSE IF fx=1 OR (fx>4 AND fx<10)
  562.       p(4)
  563.       s(r,56)=4
  564.     ENDIF
  565.   NEXT r
  566. RETURN
  567. > PROCEDURE n
  568.   ARRAYFILL s(),0
  569.   CLR losch,kreis,k_anz
  570.   red
  571. RETURN
  572. > PROCEDURE h(stn)
  573.   IF stn=7
  574.     ADD g,6
  575.     SUB r1,6
  576.   ELSE IF stn=9
  577.     ADD h,6
  578.     SUB r2,6
  579.   ENDIF
  580. RETURN
  581. > PROCEDURE q(stn)
  582.   RESTORE r
  583.   FOR f=1 TO stn
  584.     READ r1,r2
  585.   NEXT f
  586.   h(stn)
  587.   DEFFILL 0
  588.   PBOX g-2,h-2,g+r1+2,h+r2+2
  589. RETURN
  590. > PROCEDURE p(stn)
  591.   q(stn)
  592.   DEFFILL 1
  593.   PBOX g,h,g+r1,h+r2
  594. RETURN
  595. > PROCEDURE q_m
  596.   ARRAYFILL q#(),0
  597.   FOR s=1 TO 16
  598.     FOR r=1 TO 16
  599.       t=s(r,s)
  600.       IF t>0
  601.         IF t=10
  602.           ADD q#(2),0.5
  603.         ELSE IF t=11
  604.           ADD q#(5),0.5
  605.         ELSE IF (r=16 XOR s=16) AND t=1
  606.           ADD q#(1),0.5
  607.         ELSE IF r=16 AND s=16 AND t=1
  608.           ADD q#(1),0.25
  609.         ELSE IF r=16 AND t=4
  610.           ADD q#(4),0.5
  611.         ELSE IF s=16 AND t=3
  612.           ADD q#(3),0.5
  613.         ELSE IF r=16 AND s=16 AND (t=2 OR t=5)
  614.           ADD q#(t),0.1666666666667
  615.         ELSE IF r=16 AND s=15 AND t=5
  616.           ADD q#(5),0.3333333333333
  617.         ELSE IF s=15 AND t=5
  618.           ADD q#(5),0.6666666666667
  619.         ELSE IF s=16 AND t=5
  620.           ADD q#(5),0.3333333333333
  621.         ELSE IF r=16 AND t=5
  622.           ADD q#(5),0.5
  623.         ELSE IF r=15 AND s=16 AND t=2
  624.           ADD q#(2),0.3333333333333
  625.         ELSE IF r=15 AND t=2
  626.           ADD q#(2),0.6666666666667
  627.         ELSE IF r=16 AND t=2
  628.           ADD q#(2),0.3333333333333
  629.         ELSE IF s=16 AND t=2
  630.           ADD q#(2),0.5
  631.         ELSE
  632.           INC q#(t)
  633.         ENDIF
  634.       ENDIF
  635.     NEXT r
  636.   NEXT s
  637.   ADD q#(2),q#(5)
  638.   ADD q#(3),q#(4)
  639.   q#(4)=q#(6)+q#(7)+q#(8)+q#(9)
  640.   FOR f=1 TO 4
  641.     q#(f)=ROUND(q#(f),2)
  642.     t$=STR$(q#(f))
  643.     CHAR{OB_SPEC(stqm%,f+1)}=t$
  644.   NEXT f
  645.   form(stqm%)
  646. RETURN
  647. '
  648. > PROCEDURE pbx0
  649.   DEFFILL 0
  650.   PBOX 0,0,ab,ah
  651. RETURN
  652. > PROCEDURE box32(b2,b3,bx,by,bv,bw)
  653.   DEFFILL 0
  654.   IF bx<0
  655.     bx=ABS(bx)
  656.     PBOX bx-1,by-1,bv+1,bw+1
  657.   ELSE
  658.     PBOX bx,by,bv,bw
  659.   ENDIF
  660.   clbox(b2,b3,bx,by,bv,bw)
  661.   clbox(b2,b3,bx+1,by+1,bv-1,bw-1)
  662. RETURN
  663. > PROCEDURE clbox(b2,b3,bx,by,bv,bw)
  664.   DEFLINE b2
  665.   DRAW bx+1,bw-2 TO bx+1,bw-3 TO bx,bw-3 TO bx,by+3 TO bx+1,by+3 TO bx+1,by+1
  666.   DRAW  TO bx+3,by+1 TO bx+3,by TO bv-3,by TO bv-3,by+1 TO bv-2,by+1
  667.   DEFLINE b3
  668.   DRAW bx+2,bw-1 TO bx+3,bw-1 TO bx+3,bw TO bv-3,bw TO bv-3,bw-1 TO bv-1,bw-1
  669.   DRAW  TO bv-1,bw-3 TO bv,bw-3 TO bv,by+3 TO bv-1,by+3 TO bv-1,by+2
  670. RETURN
  671. > PROCEDURE kr_mal
  672.   DEFLINE 1
  673.   DEFFILL 0
  674.   PCIRCLE kr_x-xmo*12,kr_y-ymo*12,MIN(420,12+k_anz*24)
  675.   FOR f=k_anz DOWNTO 0
  676.     CIRCLE kr_x-xmo*12,kr_y-ymo*12,MIN(420,12+f*24)
  677.   NEXT f
  678. RETURN
  679. > PROCEDURE mm
  680.   evt_2=EVNT_MULTI(&X110011,1,1,1,0,0,0,0,0,0,0,0,0,0,adr_2%,0,x,y,k,f,yy,zz)
  681.   sub
  682. RETURN
  683. > PROCEDURE sub
  684.   SUB x,@v
  685.   SUB y,@w
  686. RETURN
  687. > PROCEDURE ade
  688.   IF exi=0
  689.     form(ende%)
  690.   ENDIF
  691.   IF ro=1 OR exi<>0
  692.     IF wop2<>0
  693.       ~WIND_CLOSE(w2)
  694.     ENDIF
  695.     ~WIND_DELETE(w2)
  696.     ~WIND_CLOSE(w1)
  697.     ~WIND_DELETE(w1)
  698.     ~MENU_BAR(rsc%,0)
  699.     ~RSRC_FREE()
  700.     qui=1
  701.   ENDIF
  702. RETURN
  703. > PROCEDURE f
  704.   TEXT 1,0,"~~~~~ERROR: "+STR$(ERR)
  705.   ON ERROR GOSUB f
  706.   RESUME f
  707. RETURN
  708. > PROCEDURE info
  709.   IF wop2<>0 AND han=w1
  710.     han(w2)
  711.     wtop
  712.   ELSE IF wop2=0
  713.     hi=1
  714.     han(w2)
  715.     ws156
  716.     wop2=1
  717.     wop(w2,1)
  718.   ENDIF
  719. RETURN
  720. > PROCEDURE hin(fh)
  721.   hn=istt
  722.   FOR f=1 TO fh
  723.     c=INSTR(hn,d$,CHR$(13))
  724.     EXIT IF c=0
  725.     hn=c+2
  726.   NEXT f
  727. RETURN
  728. '
  729. > PROCEDURE han(hw)
  730.   han=hw
  731.   wan=0
  732.   IF han=w2
  733.     wan=1
  734.   ENDIF
  735.   ab
  736. RETURN
  737. > PROCEDURE ab
  738.   ab=w(wan,2)-2
  739.   ah=w(wan,3)-(witi+1)
  740.   IF icon=0
  741.     SUB ab,18
  742.     SUB ah,18
  743.   ENDIF
  744. RETURN
  745. > PROCEDURE wex2
  746.   ~WIND_CLOSE(w2)
  747.   ~MENU_IENABLE(rsc%,37,1)
  748.   han(w1)
  749.   wop2=0
  750. RETURN
  751. > PROCEDURE full
  752.   FOR f=0 TO 3
  753.     SWAP w(wan,f),w(wan,f+10)
  754.   NEXT f
  755.   ab
  756.   ful=-ful+1
  757.   ws
  758.   IF (w(wan,2)<w(wan,12) OR w(wan,3)<w(wan,13)) AND w(wan,0)=w(wan,10) AND w(wan,1)=w(wan,11)
  759.     red
  760.   ENDIF
  761. RETURN
  762. > PROCEDURE ful
  763.   IF ful=1
  764.     w(wan,12)=w(0,14)
  765.     w(wan,13)=w(0,15)
  766.     w(wan,10)=0
  767.     w(wan,11)=menh
  768.     ful=0
  769.   ENDIF
  770. RETURN
  771. > PROCEDURE mini
  772.   IF icon=0
  773.     IF wop2=1 AND mini=0
  774.       ~WIND_CLOSE(w2)
  775.     ENDIF
  776.     ~WIND_CLOSE(w1)
  777.     ~WIND_DELETE(w1)
  778.     IF mini=0
  779.       ~GRAF_SHRINKBOX(w(0,0),w(0,1),w(0,4),w(0,5),w(0,0),w(0,1),w(0,2),w(0,3))
  780.       w1=WIND_CREATE(&X1111,wb,wh,w(0,14),w(0,15))
  781.     ELSE
  782.       ~GRAF_GROWBOX(w(0,0),w(0,1),w(0,2),w(0,3),w(0,0),w(0,1),w(0,4),w(0,5))
  783.       w1=WIND_CREATE(&X100100100101111,wb,wh,w(0,12),w(0,13))
  784.     ENDIF
  785.     ful
  786.     SWAP w(0,2),w(0,4)
  787.     SWAP w(0,3),w(0,5)
  788.     mini=-mini+1
  789.     han(w1)
  790.     wop(w1,0)
  791.     IF mini=0
  792.       ws156
  793.       IF wop2=1
  794.         wop(w2,1)
  795.       ENDIF
  796.     ENDIF
  797.   ENDIF
  798. RETURN
  799. > PROCEDURE icn(icn)
  800.   IF mini=0
  801.     IF wop2=1 AND icon=0
  802.       ~WIND_CLOSE(w2)
  803.     ENDIF
  804.     ~WIND_CLOSE(w1)
  805.     ~WIND_DELETE(w1)
  806.     IF icon=0
  807.       IF icn<34
  808.         ~GRAF_SHRINKBOX(w(0,6),w(0,7),w(0,8),w(0,9),w(0,0),w(0,1),w(0,2),w(0,3))
  809.       ENDIF
  810.       w1=WIND_CREATE(&X1001,wb,wh,w(0,14),w(0,15))
  811.     ELSE
  812.       ~GRAF_GROWBOX(w(0,0),w(0,1),w(0,2),w(0,3),w(0,6),w(0,7),w(0,8),w(0,9))
  813.       w1=WIND_CREATE(&X100100100101111,wb,wh,w(0,12),w(0,13))
  814.     ENDIF
  815.     ful
  816.     FOR f=0 TO 3
  817.       SWAP w(0,f),w(0,f+6)
  818.     NEXT f
  819.     IF icn=34 AND icon=0
  820.       w(0,0)=m5
  821.       w(0,1)=m6
  822.       w(0,2)=m7
  823.       w(0,3)=m8
  824.     ENDIF
  825.     wan=0
  826.     ab
  827.     icon=-icon+1
  828.     wop(w1,0)
  829.     IF icon=0
  830.       ws156
  831.       IF wop2=1
  832.         wop(w2,1)
  833.       ENDIF
  834.     ENDIF
  835.   ENDIF
  836. RETURN
  837. > PROCEDURE ws156
  838.   IF han=w1
  839.     sbx=1000 DIV (jbx/ab)
  840.     sby=1000 DIV (jby/ah)
  841.     ~WIND_SET(han,15,sbx,0,0,0)
  842.     ~WIND_SET(han,16,sby,0,0,0)
  843.     ~WIND_GET(han,8,wsx,sv,sv,sw)
  844.     xmo=wsx*((jbx-ab)/1000) DIV 12
  845.     ~WIND_GET(han,9,wsy,sv,sv,sw)
  846.     ymo=wsy*((jby-ah)/1000) DIV 12
  847.     vsx=wsx
  848.     vsy=wsy
  849.   ELSE
  850.     sty=1000 DIV (jty/ah)
  851.     ~WIND_SET(han,15,1000,0,0,0)
  852.     ~WIND_SET(han,16,sty,0,0,0)
  853.     ~WIND_GET(han,9,wty,sv,sv,sw)
  854.     vty=wty
  855.   ENDIF
  856. RETURN
  857. > PROCEDURE ws
  858.   ~WIND_SET(han,5,w(wan,0),w(wan,1),w(wan,2),w(wan,3))
  859.   wti
  860.   ws156
  861.   clp
  862. RETURN
  863. > PROCEDURE ws_8_1
  864.   IF wsx<>vsx
  865.     vsx=wsx
  866.     ~WIND_SET(w1,8,wsx,sv,sv,sw)
  867.     xmo=wsx*((jbx-ab)/1000) DIV 12
  868.     red
  869.   ENDIF
  870. RETURN
  871. > PROCEDURE ws_9_1
  872.   IF vsy<>wsy
  873.     vsy=wsy
  874.     ~WIND_SET(w1,9,wsy,sv,sv,sw)
  875.     ymo=wsy*((jby-ah)/1000) DIV 12
  876.     red
  877.   ENDIF
  878. RETURN
  879. > PROCEDURE ws_9_2
  880.   IF vty<>wty
  881.     vty=wty
  882.     hi=wty DIV (1000/(zmax-@hs))
  883.     ~WIND_SET(w2,9,wty,sv,sv,sw)
  884.     ' tmo=wty*((jty-ah)/1000) DIV 16+1
  885.     red
  886.   ENDIF
  887. RETURN
  888. > PROCEDURE wop(wo,wp)
  889.   wti
  890.   ~WIND_OPEN(wo,w(wp,0),w(wp,1),w(wp,2),w(wp,3))
  891.   clp
  892. RETURN
  893. > PROCEDURE wtop
  894.   ~WIND_SET(han,10,han,0,0,0)
  895.   wti
  896. RETURN
  897. > PROCEDURE wti
  898.   IF icon=0
  899.     IF wop2=1
  900.       ttl$=pfm$+o$(20)+CHR$(0)+CHR$(0)
  901.       ttl%=V:ttl$
  902.       ~WIND_SET(w2,2,CARD(SWAP(ttl%)),CARD(ttl%),0,0)
  903.     ENDIF
  904.     ttl$=pfm$+CHR$(0)+CHR$(0)
  905.   ELSE
  906.     ttl$=o$(21)+CHR$(0)+CHR$(0)
  907.   ENDIF
  908.   ttl%=V:ttl$
  909.   ~WIND_SET(w1,2,CARD(SWAP(ttl%)),CARD(ttl%),0,0)
  910. RETURN
  911. > PROCEDURE clp
  912.   CLIP MAX(0,@v),MAX(0,@w),MAX(0,MIN(ab,@b)),MAX(0,MIN(ah,@h)) OFFSET @v,@w
  913. RETURN
  914. > PROCEDURE wof
  915.   IF wop2<>0
  916.     han(w2)
  917.     red
  918.   ENDIF
  919.   han(w1)
  920.   red
  921. RETURN
  922. > PROCEDURE red
  923.   ab
  924.   r(@v,@w,ab,ah,0)
  925. RETURN
  926. > PROCEDURE r(rx,ry,rb,rh,evnt)
  927.   wti
  928.   IF mini=0
  929.     w1
  930.     ~WIND_GET(han,11,wx,wy,wv,ww)
  931.     WHILE wv+ww<>0
  932.       wv=wv+wx
  933.       ww=ww+wy
  934.       wx=MAX(wx,rx)
  935.       wy=MAX(wy,ry)
  936.       wv=MIN(wv,rx+rb)-wx
  937.       ww=MIN(ww,ry+rh)-wy
  938.       IF wv>0 AND ww>0
  939.         IF RC_INTERSECT(rx,ry,rb,rh,wx,wy,wv,ww)
  940.           CLIP wx,wy,MIN(wv,@b),MIN(ww,@h) OFFSET @v,@w
  941.           IF icon=0
  942.             IF han=w1
  943.               zeich
  944.             ELSE
  945.               hilfe
  946.             ENDIF
  947.           ELSE
  948.             box32(-10922,1,0,0,ab-1,ah-1)
  949.             ' pbx0
  950.             FOR s=0 TO 5
  951.               g=(s MOD 3)*24+1
  952.               h=(s DIV 3)*24+4
  953.               p(1)
  954.             NEXT s
  955.           ENDIF
  956.         ENDIF
  957.       ENDIF
  958.       ~WIND_GET(han,12,wx,wy,wv,ww)
  959.     WEND
  960.     w0
  961.     ~WIND_GET(han,4,wx,wy,wv,ww)
  962.     clp
  963.   ENDIF
  964. RETURN
  965. > PROCEDURE zeich
  966.   pbx0
  967.   TEXT 1,0,"FRE: "+STR$(fre%)
  968.   TEXT 302,0,"+X: "+STR$(xmo)+"   +Y: "+STR$(ymo)
  969.   wz=4
  970.   IF @xw<16
  971.     wz=16
  972.   ENDIF
  973.   fx=(@xv DIV 12)*12
  974.   fb=((@xv+wv) DIV 12)*12
  975.   fy=MAX(16,(@xw DIV 12)*12+wz-12)
  976.   fh=((@xw+ww-wz) DIV 12)*12+wz
  977.   DEFLINE -10922
  978.   FOR s=fy TO fh STEP 12
  979.     LINE fx,s,fb+11,s
  980.   NEXT s
  981.   FOR r=fx TO fb STEP 12
  982.     LINE r,fy,r,fh+11
  983.   NEXT r
  984.   IF block=0 AND losch=0 AND kreis=0
  985.     TEXT 167,0,e$(stein)
  986.   ELSE IF losch=1
  987.     sttx(1)
  988.   ELSE IF block>0
  989.     sttx(2)
  990.   ELSE IF kreis=1
  991.     IF k_anz=-1
  992.       sttx(7)
  993.     ELSE
  994.       TEXT 167,0,o$(6)+STR$(k_anz)
  995.     ENDIF
  996.   ENDIF
  997.   CLIP wx,MAX(@w+16,wy),MIN(wv,@b),MIN(ah-16,MIN(ww-hv,@h-16))
  998.   fy=MIN(MAX(MAX(-24,-ymo*12),(@xw DIV 12)*12-36),35*12+4)
  999.   fh=MIN(((@xw+ww) DIV 12)*12,55*12)
  1000.   fx=MIN(MAX(MAX(-24,-xmo*12),(@xv DIV 12)*12-24),53*12)
  1001.   fb=MIN(((@xv+wv) DIV 12)*12,83*12)
  1002.   FOR s=fy TO fh STEP 12
  1003.     FOR r=fx TO fb STEP 12
  1004.       stn=s(MIN(84,r/12+1+xmo),MIN(56,s/12+1+ymo))
  1005.       IF stn>0
  1006.         g=r+2
  1007.         h=s+2+16
  1008.         p(stn)
  1009.       ENDIF
  1010.     NEXT r
  1011.   NEXT s
  1012.   IF k_anz>0
  1013.     hv=0
  1014.     IF wy<@w+16
  1015.       hv=wy-@w
  1016.     ENDIF
  1017.     CLIP  OFFSET @v,@w+16
  1018.     kr_mal
  1019.   ENDIF
  1020. RETURN
  1021. > PROCEDURE hilfe
  1022.   IF evnt<>0
  1023.     pbx0
  1024.     TEXT 14,1,info$
  1025.     DEFLINE -10922
  1026.     LINE 0,17,ab,17
  1027.   ENDIF
  1028.   IF hi=1
  1029.     hn=istt
  1030.   ELSE
  1031.     hin(hi-1)
  1032.   ENDIF
  1033.   FOR f=1 TO @hs
  1034.     fh=INSTR(hn,d$,CHR$(13))
  1035.     EXIT IF fh=0 OR hi+f>zmax
  1036.     TEXT 1,f*16+4,SPACE$(ab DIV 8+1)
  1037.     TEXT 1,f*16+4,MID$(d$,hn,fh-hn)
  1038.     hn=fh+2
  1039.   NEXT f
  1040.   TEXT 1,f*16+4,SPACE$(ab DIV 8+1)
  1041. RETURN
  1042. '
  1043. > FUNCTION fsel$(a$,f$,z$)
  1044. IF INT{ADD({ADD(GB,4)},0)}<&H140
  1045.   ro=FSEL_INPUT(f$,z$,f)
  1046. ELSE
  1047.   ro=@fsel_ex(a$,f$,z$,f)
  1048. ENDIF
  1049. IF f=0 OR ro=0 OR z$=""
  1050.   RETURN ""
  1051. ENDIF
  1052. FOR r=0 TO 9
  1053.   EXIT IF MID$(f$,LEN(f$)-r,1)="\"
  1054. NEXT r
  1055. last$=LEFT$(f$,LEN(f$)-r)
  1056. RETURN last$+z$
  1057. ENDFUNC
  1058. > FUNCTION fsel_ex(a$,VAR f$,z$,f)
  1059. a$=a$+CHR$(0)
  1060. f$=f$+CHR$(0)+SPACE$(400)
  1061. z$=z$+CHR$(0)+SPACE$(150)
  1062. GCONTRL(0)=91
  1063. GCONTRL(1)=0
  1064. GCONTRL(2)=2
  1065. GCONTRL(3)=3
  1066. GCONTRL(4)=0
  1067. ADDRIN(0)=V:f$
  1068. ADDRIN(1)=V:z$
  1069. ADDRIN(2)=V:a$
  1070. GEMSYS
  1071. f$=CHAR{V:f$}
  1072. z$=CHAR{V:z$}
  1073. f=GINTOUT(1)
  1074. RETURN GINTOUT(0)
  1075. ENDFUNC
  1076. > PROCEDURE v(z$,zz,g$,a$)
  1077. IF last$=""
  1078. f$=pfad$+g$
  1079. ELSE
  1080. f$=last$+g$
  1081. ENDIF
  1082. a$=RIGHT$(g$,3)+a$
  1083. wti
  1084. f$=@fsel$(a$,f$,z$)
  1085. wti
  1086. IF f$<>""
  1087. SELECT zz
  1088. CASE 2
  1089.   c$=SPACE$(4704)
  1090.   i%=0
  1091.   FOR s=1 TO 56
  1092.     FOR r=1 TO 84
  1093.       f=s(r,s)
  1094.       BYTE{V:c$+i%}=BYTE(f)
  1095.       INC i%
  1096.     NEXT r
  1097.   NEXT s
  1098.   OPEN "O",#1,f$
  1099.   BPUT #1,V:c$,4704
  1100.   CLOSE #1
  1101. CASE 1
  1102.   IF EXIST(f$)<>0
  1103.     OPEN "I",#1,f$
  1104.     y%=LOF(#1)
  1105.     IF y%=9408
  1106.       FOR s=1 TO 56
  1107.         FOR r=1 TO 84
  1108.           BGET #1,V:f,2
  1109.           s(r,s)=f
  1110.         NEXT r
  1111.       NEXT s
  1112.     ELSE IF y%=4704
  1113.       c$=SPACE$(4704)
  1114.       BGET #1,V:c$,4704
  1115.       i%=0
  1116.       FOR s=1 TO 56
  1117.         FOR r=1 TO 84
  1118.           f=BYTE{V:c$+i%}
  1119.           s(r,s)=f
  1120.           INC i%
  1121.         NEXT r
  1122.       NEXT s
  1123.     ENDIF
  1124.     CLOSE #1
  1125.   ENDIF
  1126.   mm
  1127.   wof
  1128. CASE 3,4
  1129.   OPEN "O",#1,f$
  1130.   BPUT #1,V:c$,LEN(c$)
  1131.   BPUT #1,mal%,j%
  1132.   CLOSE #1
  1133. ENDSELECT
  1134. ENDIF
  1135. CLR f$,z$,c$
  1136. RETURN
  1137. > PROCEDURE uix
  1138. y%=(ab-1) DIV 8+1
  1139. j%=y%*(ah-16)
  1140. IF @fre>j%+33000
  1141. mal%=@mal(j%)
  1142. w1
  1143. i%=0
  1144. u=y%*8-1
  1145. TEXT 140,0,o$(11)
  1146. FOR w=16 TO ah-1
  1147.   TEXT 220,0,w
  1148.   FOR v=0 TO u
  1149.     IF v<ab
  1150.       t=POINT(v,w)
  1151.       IF v MOD 8=0
  1152.         s=7
  1153.         f=0
  1154.       ENDIF
  1155.       f=f+t*(2^s)
  1156.     ENDIF
  1157.     IF s=0
  1158.       BYTE{mal%+i%}=BYTE(f)
  1159.       INC i%
  1160.     ENDIF
  1161.     DEC s
  1162.   NEXT v
  1163. NEXT w
  1164. TEXT 140,0,o$(0)
  1165. w0
  1166. h=10
  1167. c$=SPACE$(6)
  1168. CARD{V:c$}=h
  1169. CARD{V:c$+2}=ab
  1170. CARD{V:c$+4}=ah-16
  1171. v("",3,o$(16),o$(19))
  1172. ~MFREE(mal%)
  1173. ELSE
  1174. TEXT 1,0,o$(12)
  1175. ENDIF
  1176. RETURN
  1177. > PROCEDURE bmp
  1178. y%=(DIV(ab-1,32)+1)*32
  1179. u=y% DIV 8
  1180. j%=u*(ah-16)
  1181. IF @fre>j%+33000
  1182. mal%=@mal(j%)
  1183. w1
  1184. c$=SPACE$(62)
  1185. LSET c$="BM"
  1186. {V:c$+2}=@bits(j%+62)
  1187. CARD{V:c$+6}=0
  1188. CARD{V:c$+8}=0
  1189. {V:c$+10}=@bits(62)
  1190. {V:c$+14}=@bits(40)
  1191. {V:c$+18}=@bits(ab)
  1192. {V:c$+22}=@bits(ah-16)
  1193. CARD{V:c$+26}=@bit2(1)
  1194. CARD{V:c$+28}=@bit2(1)
  1195. {V:c$+30}=0
  1196. {V:c$+34}=@bits(j%)
  1197. {V:c$+38}=0
  1198. {V:c$+42}=0
  1199. {V:c$+46}=@bits(0)
  1200. {V:c$+50}=@bits(0)
  1201. FOR f=0 TO 1
  1202.   BYTE{V:c$+54+f*4}=(-f+1)*255
  1203.   BYTE{V:c$+55+f*4}=(-f+1)*255
  1204.   BYTE{V:c$+56+f*4}=(-f+1)*255
  1205.   BYTE{V:c$+57+f*4}=0
  1206. NEXT f
  1207. TEXT 140,0,o$(11)
  1208. FOR f=ah-1 DOWNTO 16
  1209.   h=ah-1-f+16
  1210.   TEXT 220,0,h
  1211.   o%=(f-16)*u
  1212.   FOR g=0 TO u DIV 2-1
  1213.     i%=0
  1214.     FOR y=15 DOWNTO 0
  1215.       t=g*16+(-y+15)
  1216.       IF t<ab
  1217.         i=POINT(t,h)
  1218.         IF BTST(i,0)<>0
  1219.           i%=BSET(i%,y)
  1220.         ENDIF
  1221.       ENDIF
  1222.     NEXT y
  1223.     CARD{mal%+o%+g*2}=CARD(i%)
  1224.   NEXT g
  1225. NEXT f
  1226. TEXT 140,0,o$(0)
  1227. w0
  1228. v("",4,o$(17),o$(19))
  1229. ~MFREE(mal%)
  1230. ELSE
  1231. TEXT 1,0,o$(12)
  1232. ENDIF
  1233. RETURN
  1234. > FUNCTION bits(o%)
  1235. zx%=BYTE{V:o%}
  1236. zy%=SHL(BYTE{V:o%+1},8)
  1237. g%=SHL(BYTE{V:o%+2},16)
  1238. h%=SHL(BYTE{V:o%+3},24)
  1239. RETURN zx%+zy%+g%+h%
  1240. ENDFUNC
  1241. > FUNCTION bit2(zz)
  1242. zx%=BYTE{V:zz}
  1243. zy%=BYTE{V:zz+1}*2^8
  1244. RETURN zx%+zy%
  1245. ENDFUNC
  1246. > PROCEDURE w1
  1247. ~WIND_UPDATE(1)
  1248. RETURN
  1249. > PROCEDURE w0
  1250. ~WIND_UPDATE(0)
  1251. RETURN
  1252. > PROCEDURE xx
  1253. RETURN
  1254. > PROCEDURE form(o%)
  1255. wti
  1256. ~FORM_CENTER(o%,fx,fy,fb,fh)
  1257. ~OBJC_DRAW(o%,0,2,fx,fy,fb,fh)
  1258. ~FORM_DIAL(0,0,0,0,0,fx,fy,fb,fh)
  1259. ro=FORM_DO(o%,0)
  1260. ~FORM_DIAL(3,0,0,0,0,fx,fy,fb,fh)
  1261. ~OBJC_CHANGE(o%,ro,0,fx,fy,fb,fh,0,0)
  1262. wti
  1263. ' button: version=2;ende=1+2;wahl=1-11,12;stqm=1,2-5
  1264. RETURN
  1265. > FUNCTION fre
  1266. IF a_st<>0
  1267. RETURN MALLOC(-1)
  1268. ENDIF
  1269. zx%=GEMDOS(68,L:-1,0)
  1270. zy%=GEMDOS(68,L:-1,1)
  1271. RETURN MAX(zx%,zy%)
  1272. ENDFUNC
  1273. > FUNCTION mal(j%)
  1274. IF a_st<>0
  1275. RETURN MALLOC(j%)
  1276. ENDIF
  1277. RETURN GEMDOS(68,L:j%,3)
  1278. ENDFUNC
  1279.